/**
 * Created by liyuanquan on 2017/1/4
 **/
var proStepFindUrl = serverPath + "craftProcessSteps/findCraftProcessStep/";
var proDetailUrl = serverPath + 'craftProcessSteps/findCraftProcessStepDetail';
var proAddUrl = serverPath + "craftProcessSteps/addCraftProcessStep";
var proCopyUrl = serverPath + "";
var proStepDeleteUrl = serverPath + "craftProcessSteps/deleteCraftProcessStep";
var proEditUrl = serverPath + "craftProcessSteps/updateCraftProcessStepDesc";

// 版本相关的URL
var proVersionUpUrl = serverPath + 'craftProcessSteps/upgradeCraftProcessStep';
var ObjHistoryUrl = serverPath + 'versionHistory/queryVersionHistoryByTypeIdAndObjectId';
var ObjVersionChangeUrl = serverPath + 'versionHistory/queryVersionHistoryById';
var ObjVersionChangeStatusUrl = serverPath + 'versionProcess/queryOptionalState';
var ObjVersionAddVersionHistoryUrl = serverPath + 'versionHistory/addVersionHistory';

var addProgramStep = 0;
var copyProgramStep = 0;
var proVersionDetail = 0;
var programStepEdit = 0;
var proHistory = 0;
var proUpData = 0;
var proInfo = 0;
var operate = 0;

var proStepId = -1;
var proTypeId = 3;

var proCode;
var proName;
var proDesc;
/************************************ 页面加载 获取数据 *****************************************/ 
$(function() {
	initData();
    $('#VersionHistoryTable').bootstrapTable("reset");
});
$(window).resize(function() {
	setPageSize();
    //$('#VersionHistoryTable').bootstrapTable("reset");
});

function initData() {
    showData();
    // 无数据状态下按钮不可用
    $("#btns").find("button").not($("#AddBtn")).attr("disabled", true);
    $("#PDescEdit").attr("disabled", true);
    $("#btnProSetpInfo").attr("disabled", true);

    // 点击搜索按钮获取数据
    $('#btnPSCSearch').click(function() {
        showData();
    });

    setPageSize();

    $('#proStepResultTable').on('check.bs.table', function (e, row){
        //获取选中行的数据
        proStepId = row["id"];
        //刷新右边的数据显示
        GetproStepDetail(proStepId);
        GetproStepPic(proStepId);
    });

	// 新增按钮的事件
	$('#AddBtn').click(function() {
        var url = "AddProgramStep.html";
        addProgramStep = ibcpLayer.ShowDiv(url, '新增程序步骤', '500px', '420px',function() {

        });
    });
  
	// 拷贝按钮的事件
	$('#CopyBtn').click(function() {
        var url = "ProgramCopy.html";
        copyProgramStep = ibcpLayer.ShowDiv(url, '拷贝程序步骤', '500px', '380px',function() {
            proCode = $('#ProStCode').val();
            proName = $('#ProStName').val();
            proDesc = $('#ProStDescribe').val();

            $('#ProCopyCode').val(proCode);
            $('#ProCopyName').val(proName);
            $('#ProCopyDesc').val(proDesc);
        });
    });

	// 详细信息 按钮事件
    $('#VNowBtn').click(function() {
        var url = "../Version/VersionDetailCheck.html";
        proVersionDetail = ibcpLayer.ShowDiv(url, '程序版本详细信息', '400px', '380px',function() {
            $("#VersionDetailTable").bootstrapTable();
            var proVsId = $("#ProStVersion").attr('proVsId');
            loadVersionDetailData(proVsId);
        });
    });

    // 版本历史 按钮事件
	$('#VHistoryBtn').click(function() {
        var url = "../Version/ObjectVersionHistory.html";
        proHistory = ibcpLayer.ShowDiv(url, '程序步骤历史版本', '700px', '450px',function() {
            $('#VersionHistoryTable').bootstrapTable();
            var proHistoryId = $("#ProStCode").attr("proStepId");
            checkHistoryVersion(proHistoryId, proTypeId);
        });
    });

    // 变更信息按钮的事件
	$('#VChangeBtn').click(function() {
        var url = "../Version/ObjectStateChange.html";
        ProChange = ibcpLayer.ShowDiv(url, '程序步骤版本变更', '470px', '500px',function() {
            // 选择日期从当前日期开始
            var fomrmat = new ibcpDateFormat();
            fomrmat.getServerDate("yyyy-MM-dd",function(dateVal){
                $('#ValidDateStart').attr('min', dateVal);
                $('#ValidDateEnd').attr('min', dateVal);
            });
            var changeVsId = $("#ProStVersion").attr('proVsId');
            GetVsInfo(changeVsId);
        });
    });

    //升级程序步骤按钮事件
    $('#VUpDataBtn').click(function() {
        var url = "ProgramStepUpVS.html";
        proUpData = ibcpLayer.ShowDiv(url, '程序版本升级', '400px', '400px',function() {
            $('#proUpCode').val($('#ProStCode').val());
            $('#proUpName').val($('#ProStName').val());
            $('#proUpDesc').val($('#ProStDescribe').val());
            proStUpEvent();
        });
    });

	// 程序描述信息修改
	$('#PDescEdit').click(function() {
        // 确认修改 弹出签名 提交后台
        ProStepEdit();
    });

    // 程序步骤资源内容
    $('#btnProSetpInfo').click(function() {
        var proId = $("#proCode").attr('proId');
        var divUrl = '../Editor/ueditor/editProSrc.html?id=' + proStepId;
        var iframeWin = null;
        var divIndex = layer.open({
            //layer提供了5种层类型。可传入的值有：0（信息框，默认）；1（页面层）；2（iframe层）；3（加载层）；4（tips层）。
            // 若你采用layer.open({type: 1})方式调用，则type为必填项（信息框除外）
            type: 2,
            //动画
            anim: 5,
            //title ：String
            //title: ['文本', 'font-size:18px;']
            //title: false 不显示标题栏
            title: ['程序步骤内容编辑', 'font-size:18px;font-weight:bold;'],
            //是否固定弹出
            fix: false,
            //最大小化按钮
            maxmin: true,
            //控制点击弹层外区域关闭
            shadeClose: false,
            //窗口大小 area: ['400px', '500px'] or auto 自适应大小
            area: ['800px', '500px'],
            //area: '350px',
            //iframe层的url
            //content: 'http://www.baidu.com',
            content: divUrl,
            //是否允许拉伸
            resize: true,
            //浏览器滚动条
            scrollbar: false,
            zIndex: layer.zIndex, //重点1
            success: function(layero, index){
                var body = layer.getChildFrame('body', index);
                iframeWin = window[layero.find('iframe')[0]['name']];
            },
            full: function () {
                iframeWin.Max();
            },
            cancel: function () {
                if(iframeWin.savedCheck()){
                    var sig = iframeWin.initUnloadEvent();        //提示是否需要保存
                    return false;
                    return sig;
                }
            },
            end: function(){}    
        });
    });
};

// 左右两个区域的高度
function setPageSize() {
    $('#rightSide_2').css('height', $('#leftSide').height() -  $('#right1').height()-10.5);
    $('#EditArea').css('height', $('#rightSide_2').height() -  60);
    var dataHeight = $('#leftSide').height() -  95;
    $('#proStepResultTable').bootstrapTable('refreshOptions',{height:dataHeight});
};

//初始化显示数据
function showData(){
    var SearchInfo = $('#txtProStepContent').val();
    GetData(SearchInfo);
}
/************************************ 点击搜索按钮 获取左边数据 ************************************/
// 点击搜索按钮 显示全部查找结果
function GetData(str){
    InitBtnStatus();
    var datas = {'str':str};
    ibcpAjax.Select(proStepFindUrl,datas,true,function(result){
        var data = result.data;
        $('#proStepResultTable').bootstrapTable('load', data);
        if(data.length >0) {
            //设置选中行
            $('#proStepResultTable').bootstrapTable('check', 0);
        }
        else {
            deletSuccess();
        }
    });
}
//刷新定位新数据行
function GetNewData(newId){
    var sdatas = {'str':$('#txtProCondition').val()};
    ibcpAjax.Select(proStepFindUrl,sdatas,true,function(results){
        var data = results.data;
        $('#proStepResultTable').bootstrapTable('load', data);
        if(data.length >0) {
            //得到新增行数据
            var nowRow = $('#proStepResultTable').bootstrapTable('getRowByUniqueId',newId);
            //移除新增行数据
            $('#proStepResultTable').bootstrapTable('removeByUniqueId', newId);
            //将新增的数据放置在第一行
            $('#proStepResultTable').bootstrapTable("prepend", nowRow);
            //定位新增行
            $("#proStepResultTable").bootstrapTable('check', 0);

        }
    });
}
/**************************************** 添加 程序步骤 **********************************************/
//添加程序步骤确认按钮事件
function AddProStep(){
    //验证
    var NewCode = $('#AddCode').val();
    var NewName = $('#AddName').val();
    var NewDesc = $('#AddDesc').val();
    var NewReason = $('#AddReason').val();
    if(NewCode == ''){
        ibcpLayer.ShowTips("请填入代码！",$('#AddCode'));
        return;
    }
    if(NewName == ''){
        ibcpLayer.ShowTips("请填入名称！",$('#AddName'));
        return;
    }
    if(NewReason == ''){
        ibcpLayer.ShowTips("请填入理由！",$('#AddReason'));
        return;
    }
    //签名
    CallSign(100,function(sid){
        var datas = {"sid":sid,"code":NewCode,"name":NewName,"description":NewDesc,"reason":NewReason};
        // $('#proStepResultTable').bootstrapTable('prepend', datas);
        ibcpAjax.Insert(proAddUrl,datas,true,function(result){
            // $('#proStepResultTable').bootstrapTable('prepend', datas);
            ibcpLayer.ShowOK('新增成功');
            var newId = result.data;
            // 签名层消失
            SignCancel();
            // 新增层消失
            AddCancel();
            // 从新获取数据
            GetNewData(newId);
        });
    })
};
//添加程序步骤取消按钮事件
function AddCancel(){
    ibcpLayer.Close(addProgramStep);
};
/********************************************* 拷贝 程序步骤 **********************************************/
// 拷贝程序步骤确定按钮事件
function CopyProStep(){
    //验证
    var CopyCode = $('#ProCopyCode').val();
    var CopyName = $('#ProCopyName').val();
    var CopyDesc = $('#ProCopyDesc').val();
    var CopyReason = $('#ProCopyReason').val();
    if(CopyDesc == ''){
        ibcpLayer.ShowTips("请填入描述！",$('#ProCopyDesc'));
        return;
    }
    if(CopyReason == ''){
        ibcpLayer.ShowTips("请填入理由！",$('#ProCopyReason'));
        return;
    }
    //签名
    CallSign(100,function(sid){
        var datas = {};
        ibcpAjax.Insert(proCopyUrl,datas,true,function(result){
            ibcpLayer.ShowOK('拷贝成功');
            var newId = result.data;
            // 签名层消失
            SignCancel();
            // 拷贝层消失
            CopyCancel();
            // 从新获取数据
            GetNewData(newId);
        });
    })
};
//拷贝程序步骤取消按钮事件
function CopyCancel(){
    ibcpLayer.Close(copyProgramStep);
};
/****************************************** 删除 程序步骤 ***********************************************/
// 删除按钮的事件
function ProDelete() {
    operate = 2;
    var ProSelected = $('#proStepResultTable').bootstrapTable('getSelections');
    var ProSelDelId = ProSelected[0].id;
    var ProSelDelCode = ProSelected[0].code;
    var ProSelDelName = ProSelected[0].name;
    ibcpLayer.ShowConfirm('您确认要删除程序步骤 : ' + ProSelDelCode, function testFun(){
        ProSelDelete(ProSelDelId);
    });
};

// 删除所选的程序步骤
function ProSelDelete(ProSelDelId){
    CallSign(100,function(sid) {
        var datas = {'sid':sid,'id':ProSelDelId};
        ibcpAjax.Delete(proStepDeleteUrl,datas,true,function(){
            ibcpLayer.ShowOK('删除成功！');
            // 签名层消失
            SignCancel();
            // 删除成功后按钮的状态改变
            deletSuccess();
            // 获取新数据
            GetData();
        });
    });
}

// 删除成功后
function deletSuccess() {
    // 清空数据
    $("#ProStCode").val("");
    $("#ProStName").val("");
    $("#ProStVersion").val("");
    $("#ProStState").val("");
    $("#ProStDescribe").val("");
    $('#EditArea').attr("src","");

    // 删除数据之后按钮不可用
    $("#btns").find("button").not($('#AddBtn')).attr("disabled", true);
    $("#PDescEdit").attr("disabled", true);
    $("#btnProSetpInfo").attr("disabled", true);
};
/****************************************** 程序步骤 版本详细 ******************************************/
// 显示版本详细
function loadVersionDetailData(id){
    'use strict';
    var datas = {'id': id};

    ibcpAjax.Select(ObjVersionChangeUrl, datas, true, function(result){
        var data = result.data;
        $('#Object_Detail_Version').val(data.version);
        $('#Object_Detail_Version').attr('readonly', 'readonly');
        $('#Object_Detail_State').val(data.toName);
        $('#Object_Detail_State').attr('readonly', 'readonly');
        $('#Object_Detail_StartTime').val(data.validStart);
        $('#Object_Detail_StartTime').attr('readonly', 'readonly');
        $('#Object_Detail_EndTime').val(data.validEnd);
        $('#Object_Detail_EndTime').attr('readonly', 'readonly');
    });
}

// 关闭版本详细信息
function VSDetailClose(){
    layer.close(proVersionDetail);
}
/****************************************** 查看 版本历史 **********************************************/
// 查看版本详细信息
function checkHistoryVersion(objId, typeId){
    'use strict';
    var datas = {'objId': objId, 'typeId': typeId};

    ibcpAjax.Select(ObjHistoryUrl, datas, true, function(result){
        var data = result.data;
        $('#VersionHistoryTable').bootstrapTable('load', data);
    });
}

// 关闭弹出框
function VSHistoryClose(){
    layer.close(proHistory);
}
/*********************************************** 变更 程序步骤版本 ****************************************/
//当前版本信息
var currentVS = "";

//加载当前版本信息
function GetVsInfo(vId){
    var datas = {'id': vId};
    ibcpAjax.Select(ObjVersionChangeUrl, datas, true, function(result) {
        currentVS = result.data;
        $('#CurrentVersion').val(currentVS.version);
        $('#CurrentStatus').val(currentVS.toName);
        LoadAllowChangeStatusInfo(currentVS.toStatusId, currentVS.typeId);
    });
}

//加载可变更状态
function LoadAllowChangeStatusInfo(fromId, typeId){
    var datas = {'fromId': fromId,'typeId': typeId};
    $("#targetStatus").attr('readonly', true);
    $("#ValidDateStart").attr('readonly',true);
    $("#ValidDateEnd").attr('readonly',true);
    $("#ChangeReason").attr('readonly',true);
    $("#btnVCSave").attr('disabled',true);

    ibcpAjax.Select(ObjVersionChangeStatusUrl, datas, true, function(result){
        var data = result.data
        if(data.length > 0){
            $("#targetStatus").attr('readonly', false);
            $("#ValidDateStart").attr('readonly',false);
            $("#ValidDateEnd").attr('readonly',false);
            $("#ChangeReason").attr('readonly',false);
            $("#btnVCSave").attr('disabled',false);

            for(var i=0;i<data.length;i++) {
                var toOptions = "<option value='" + JSON.stringify(data[i]) + "'>" + data[i].toName + "</option>"
                $("#targetStatus").append(toOptions);
                $("#targetStatus").val('');
            }
            //只有一个数据的时候默认选择
            if(data.length == 1){
                $("#targetStatus").prop('selectedIndex', 0);
            }

        }
        else {
            ibcpLayer.ShowMsgCB('没有可变更的状态',function(){VSCCancel();});
        }
    });
}

//版本变更确认按钮事件
function VSCSave(){
    var vStart ='';
    var vEnd ='';
    var status = $("#targetStatus").val();
    var start = $("#ValidDateStart").val();
    var end = $("#ValidDateEnd").val();

    if(status == null || status == ""){
        ibcpLayer.ShowTips('请选择状态',$("#targetStatus"));
        return;
    }

    if(start != null && start != ""){
        vStart = start + ' 00:00:00';
    }

    if(end != null && end != ""){
        vEnd = end + ' 23:59:59';
    }

    if(vEnd != '' && vStart != ''){
        if(vEnd <= vStart){
            ibcpLayer.ShowTips('结束日期 早于 开始日期',$("#ValidDateEnd"));
            return;
        }
    }

    var selectToInfo = $.parseJSON(status); //选择的目标状态信息 是字符串 需要转Json

    var signNeedId = selectToInfo.aid;   //签名需要的ID
    var toId = selectToInfo.toId;         //目标状态ID
    var reason = $("#ChangeReason").val();

    CallSign(signNeedId,function(sid){
        var datas = {'verFlowId': currentVS.verFlowId,
            'version': currentVS.version,
            'fromStatusId': currentVS.toStatusId,
            'toStatusId': toId,
            'validStart': vStart,
            'validEnd': vEnd,
            'sid': sid,
            'reason': reason,
            'objId': currentVS.objId,
            'typeId': currentVS.typeId
        };
        //保存
        ibcpAjax.Insert(ObjVersionAddVersionHistoryUrl,datas,false,function(){
            ibcpLayer.ShowOK("操作成功！");
            var proStepId = $("#ProStCode").attr('proStepId');
            // 关闭签名
            SignCancel();
            // 关闭变更
            VSCCancel();
            // 从新获取数据
            GetNewData(proStepId);
            // 选中更改行
            GetproStepDetail(proStepId);
        });
    });
};

//版本变更取消按钮事件
function VSCCancel(){
    layer.close(ProChange);
}
/***************************************** 升级 程序步骤 **********************************************/
// 升级按钮点击事件
function proStUpEvent(){
    $('#btnProStUpConfirm').on('click', function (){
        var ProSelected = $('#proStepResultTable').bootstrapTable('getSelections');
        var proId = ProSelected[0].id;
        proUpConfirm(proId);
    });

    $('#btnProStUpCancel').on('click', function (){
        proUpCancel();
    });
}

//升级程序步骤 确认按钮事件
function proUpConfirm(proId){
    //验证
    var puReason = $('#proUpReason').val();
    if(puReason == ''){
        ibcpLayer.ShowTips("请填入理由！",$('#PAReason'));
        return;
    }
    //签名
    CallSign(100,function(sid){
        var datas = {'id':proId,'sid':sid,'reason':puReason};
        ibcpAjax.Insert(proVersionUpUrl,datas,true,function(result){
            ibcpLayer.ShowOK('升级成功');
            var newId = result.data;
            //关闭签名
            SignCancel();
            //关闭升级
            proUpCancel();
            //刷新定位新数据行
            GetNewData(newId);
        });
    })
}

//升级程序步骤 取消按钮事件
function proUpCancel(){
    ibcpLayer.Close(proUpData);
}
/************************************** 修改 程序步骤描述内容 *******************************************/
// 修改程序步骤描述提交按钮事件
function ProStepEdit() {
    var EditDesc = $('#ProStDescribe').val();
    if(EditDesc == "") {
        ibcpLayer.ShowTips("请填入描述！",$('#ProStDescribe'));
        return;
    };
    //签名
    CallSign(100,function(sid) {
        var datas = {'sid':sid,'description':EditDesc,'id':proStepId};
        ibcpAjax.Update(proEditUrl,datas,true,function(newId) {
            ibcpLayer.ShowOK('修改成功');
            var newId = datas['id'];
            // 签名层消失
            SignCancel();
            // 新增层消失
            EditCancel();
            // 从新获取数据
            GetNewData(newId);
        });
    });
};
// 修改程序步骤取消按钮事件
function EditCancel() {
    ibcpLayer.Close(programStepEdit);
};
/********************************** 左边数据表 点击 右边显示相应内容 ***********************************/
//初始化 按钮状态
function InitBtnStatus(){
    $('#AddBtn').attr("disabled", false);
    $('#DeleteBtn').attr("disabled", true);
    $('#VNowBtn').attr("disabled", true);
    $('#VHistoryBtn').attr("disabled", true);
    $('#VChangeBtn').attr("disabled", true);
    $('#VUpDataBtn').attr("disabled", true);
    $('#PDescEdit').attr("disabled", true);
    $('#btnProSetpInfo').attr("disabled", true);
}


// 获取程序步骤详细信息
function GetproStepDetail(proStepId){
    var datas = {'id':proStepId};
    ibcpAjax.Select(proDetailUrl,datas,true,function(result) {
        var data = result.data;
        var status = data["statusName"];
        $("#ProStCode").val(data["code"]);
        $("#ProStCode").attr('proStepId', data["id"]);
        $("#ProStName").val(data["name"]);
        $("#ProStVersion").val(data["version"]);
        $("#ProStVersion").attr('proVsId', data["verId"]);
        $("#ProStState").val(status);
        $("#ProStDescribe").val(data["description"]);

        // 有数据之后按钮可用
        $("#btns").find("button").not($('#CopyBtn')).attr("disabled", false);


        $('#DeleteBtn').attr("disabled", false);
        $('#VNowBtn').attr("disabled", false);
        $('#VHistoryBtn').attr("disabled", false);
        $('#VChangeBtn').attr("disabled", false);
        $('#VUpDataBtn').attr("disabled", false);
        if(status == "失效"){
            $('#VChangeBtn').attr("disabled", true);
        }

        // 筛选可编辑状态的数据
        if(status == "编辑"){
            $("#ProStDescribe").attr('readonly',false);
            $('#DeleteBtn').attr("disabled", false);
            $('#PDescEdit').attr("disabled", false);
            $('#btnProSetpInfo').attr("disabled", false);
        }
        else {
            $("#ProStDescribe").attr('readonly',true);
            $('#DeleteBtn').attr("disabled", true);
            $('#PDescEdit').attr("disabled", true);
            $('#btnProSetpInfo').attr("disabled", true);
        }
    });
}

// 获取程序步骤图
function GetproStepPic(proStepId){
    var url = '../Editor/ueditor/index.html?id=' + proStepId;
    $('#EditArea').attr("src",url);
}

//区分失效状态和其他状态
function setUneffectiveRow(row, index) {
    //var strclass = "";
    if (row.statusName == '失效') {
        return { css: {"color": "#7f7f7f"}};
    }
    else {
        return {};
    }

}